(function($){ var jprp={ response:null, getEndpointURL:function( URL){ var locationObject=document.location; if('string'===typeof( URL) && URL.match(/^https?:\/\//)){ locationObject=document.createElement('a'); locationObject.href=URL; } var args='relatedposts=1'; if(! $( '#jp-relatedposts').data('exclude')){ args +='&relatedposts_exclude=' + $( '#jp-relatedposts').data('exclude'); } var pathname=locationObject.pathname; if('/'!==pathname[0]){ pathname='/' + pathname; } if(''===locationObject.search){ return pathname + '?' + args; }else{ return pathname + locationObject.search + '&' + args; }}, getAnchor:function( post, classNames){ var anchor_title=post.title; if(''!==( '' + post.excerpt)){ anchor_title +='\n\n' + post.excerpt; } var anchor=$( ''); anchor.attr({ 'class':classNames, 'href':post.url, 'title':anchor_title, 'rel':post.rel, 'data-origin':post.url_meta.origin, 'data-position':post.url_meta.position });var anchor_html=$( '
').append(anchor).html(); return [ anchor_html.substring(0, anchor_html.length-4), '' ]; }, generateMinimalHtml:function( posts){ var self=this; var html=''; $.each(posts, function( index, post){ var anchor=self.getAnchor(post, 'jp-relatedposts-post-a'); var classes='jp-relatedposts-post jp-relatedposts-post' + index; html +='

'; html +=''; html +=''; html +=''; html +='

'; }); return ''; }, generateVisualHtml:function( posts){ var self=this; var html=''; $.each(posts, function( index, post){ var anchor=self.getAnchor(post, 'jp-relatedposts-post-a'); var classes='jp-relatedposts-post jp-relatedposts-post' + index; if(! post.img.src){ classes +=' jp-relatedposts-post-nothumbs'; }else{ classes +=' jp-relatedposts-post-thumbs'; } html +='
'; if(post.img.src){ html +=anchor[0] + '' + anchor[1]; }else{ var anchor_overlay=self.getAnchor(post, 'jp-relatedposts-post-a jp-relatedposts-post-aoverlay'); html +=anchor_overlay[0] + anchor_overlay[1]; } html +=''; html +='

').text(post.excerpt).html() + '

'; html +=''; html +=''; html +='
'; }); return ''; }, setVisualExcerptHeights:function(){ var elements=$( '#jp-relatedposts .jp-relatedposts-post-nothumbs .jp-relatedposts-post-excerpt'); if(0 >=elements.length){ return; } var fontSize=parseInt( elements.first().css('font-size'), 10), lineHeight=parseInt( elements.first().css('line-height'), 10); elements.css('max-height', ( 5 * lineHeight / fontSize) + 'em' ); }, getTrackedUrl:function( anchor){ var args='relatedposts_hit=1'; args +='&relatedposts_origin=' + $( anchor).data('origin'); args +='&relatedposts_position=' + $( anchor).data('position'); var pathname=anchor.pathname; if('/'!==pathname[0]){ pathname='/' + pathname; } if(''===anchor.search){ return pathname + '?' + args; }else{ return pathname + anchor.search + '&' + args; }}, cleanupTrackedUrl:function(){ if('function'!==typeof history.replaceState){ return; } var cleaned_search=document.location.search.replace(/\brelatedposts_[a-z]+=[0-9]*&?\b/gi, ''); if('?'===cleaned_search){ cleaned_search=''; } if(document.location.search!==cleaned_search){ history.replaceState({}, document.title, document.location.pathname + cleaned_search); }} }; $( function(){ jprp.cleanupTrackedUrl(); $.getJSON(jprp.getEndpointURL(), function( response){ if(0===response.items.length || 0===$( '#jp-relatedposts').length){ return; } jprp.response=response; var html=''; if(!response.show_thumbnails){ html=jprp.generateMinimalHtml(response.items); }else{ html=jprp.generateVisualHtml(response.items); } $( '#jp-relatedposts').append(html); jprp.setVisualExcerptHeights(); $( '#jp-relatedposts').show(); $( '#jp-relatedposts a.jp-relatedposts-post-a').click(function(){ this.href=jprp.getTrackedUrl(this); });}); }); })(jQuery);